home *** CD-ROM | disk | FTP | other *** search
- property ScrollButtonGod, Slider, slidSprite, slidFirst, slidLast, minSlide, maxSoftSlide, currentSlid, newTicks, thePageBottom
-
- on catchEvent me, xEvent
- case xEvent of
- #scrollUp:
- scrollUp(me)
- #scrollDown:
- scrollDown(me)
- otherwise:
- catchEvent(ScrollButtonGod, xEvent)
- end case
- end
-
- on turnON me
- turnON(ScrollButtonGod)
- end
-
- on turnOff me
- turnOff(ScrollButtonGod)
- end
-
- on softSlide me, xInt
- set tempTicks to the ticks
- if tempTicks > newTicks then
- set slideHere to nearJump(me, xInt)
- hardSlide(me, slideHere)
- set newTicks to tempTicks + 6
- end if
- end
-
- on hardSlide me, xInt
- set slideThere to bestValue(me, xInt)
- moveSlidThing(me, slideThere)
- end
-
- on crankDown me
- hardSlide(me, slidLast)
- end
-
- on crankUp me
- hardSlide(me, slidFirst)
- end
-
- on getMapInfo me
- return [slidFirst, slidLast]
- end
-
- on changeScrolledMember me, xMember
- crankUp(me)
- set the member of sprite slidSprite to xMember
- if initMapInfo(me) then
- linkUp(Slider, me)
- return 1
- else
- return 0
- end if
- end
-
- on new me, xSprite, xLineHeight, xPageHeight, xPageBottom
- set slidSprite to xSprite
- puppetSprite(slidSprite, 1)
- set minSlide to xLineHeight
- set maxSoftSlide to xPageHeight
- set thePageBottom to xPageBottom
- return me
- end
-
- on linkUp me, xScrollButtonGod, xSlider
- set ScrollButtonGod to xScrollButtonGod
- set Slider to xSlider
- return initMapInfo(me)
- end
-
- on scrollUp me
- scrollOne(me, slidFirst)
- end
-
- on scrollDown me
- scrollOne(me, slidLast)
- end
-
- on scrollOne me, xInt
- set tempTicks to the ticks
- if tempTicks > newTicks then
- set slideHere to tinyJump(me, xInt)
- hardSlide(me, slideHere)
- set newTicks to tempTicks + 6
- end if
- end
-
- on setMinSlide me, xInt
- set minSlide to xInt
- end
-
- on setMaxSlide me, xInt
- set maxSoftSlide to xInt
- end
-
- on updateSlider me
- moveSlidThing(me, currentSlid)
- turnOff(ScrollButtonGod)
- end
-
- on bestValue me, xInt
- set thisValue to xInt - slidFirst
- set thisOff to thisValue mod minSlide
- if thisOff <> 0 then
- set thisValue to thisValue - thisOff
- end if
- return thisValue + slidFirst
- end
-
- on nearJump me, xInt
- set slideHere to xInt
- if abs(currentSlid - slideHere) > maxSoftSlide then
- if slideHere < currentSlid then
- set slideHere to currentSlid - maxSoftSlide
- else
- set slideHere to currentSlid + maxSoftSlide
- end if
- end if
- return slideHere
- end
-
- on tinyJump me, xInt
- set slideHere to xInt
- if abs(currentSlid - slideHere) > minSlide then
- if slideHere < currentSlid then
- set slideHere to currentSlid - minSlide
- else
- set slideHere to currentSlid + minSlide
- end if
- end if
- return slideHere
- end
-
- on moveSlidThing me, xInt
- set currentSlid to xInt
- if currentSlid = slidFirst then
- catchEvent(ScrollButtonGod, #top)
- else
- if currentSlid = slidLast then
- catchEvent(ScrollButtonGod, #bottom)
- else
- catchEvent(ScrollButtonGod, #middle)
- end if
- end if
- set the locV of sprite slidSprite to currentSlid
- reDraw(Slider, xInt)
- end
-
- on initMapInfo me
- updateStage()
- set slidFirst to the locV of sprite slidSprite
- set currentSlid to slidFirst
- set spaceToBottom to the height of the member of sprite slidSprite - the locV of the regPoint of the member of sprite slidSprite
- set slidLast to thePageBottom - spaceToBottom - minSlide
- set slidLast to slidLast - ((slidLast - slidFirst) mod minSlide)
- return slidLast < slidFirst
- end
-